package com.tio.helloworldserver.server;

import com.tio.helloworldserver.common.Constant;
import com.tio.helloworldserver.server.handler.HelloServerAioHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.tio.server.ServerGroupContext;
import org.tio.server.TioServer;
import org.tio.server.intf.ServerAioHandler;
import org.tio.server.intf.ServerAioListener;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.IOException;

/**
 * @author wangzh
 * @create 2023-11-11 15:13
 */
@Component
@Slf4j
public class HelloServerStarter {

    /**
     * handler, 包括编码、解码、消息处理
     */
    public static ServerAioHandler aioHandler = new HelloServerAioHandler();

    /**
     * 事件监听器，可以为null，但建议自己实现该接口，可以参考showcase了解些接口
     */
    public static ServerAioListener aioListener = null;

    /**
     * 一组连接共用的上下文对象
     */
    public static ServerGroupContext serverGroupContext = new ServerGroupContext("hello-tio-server", aioHandler, aioListener);

    /**
     * tioServer对象
     */
    public static TioServer tioServer = new TioServer(serverGroupContext);

    /**
     * 有时候需要绑定ip，不需要则null
     */
    @Value("${tio.server.host}")
    public static String serverIp;

    /**
     * 监听的端口
     */
    @Value("${tio.server.port}")
    private Integer serverPort;

    /**
     * 启动Server
     *
     * @throws InterruptedException
     */
    @PostConstruct
    public void start() throws IOException {
        //serverGroupContext.setHeartbeatTimeout(Constant.TIMEOUT);
        tioServer.start(serverIp, serverPort);
    }

    @PreDestroy
    public void destory() {

    }

}
